# 开发者：秦皇岛职业技术学院信息工程系 王国栋老师
# 日期：2023/10/24
# 时间：16:40
import json


class StuSystem:
    menu = '''
     *******************************************学生管理系统**************************************** 
                        1、添加学生信息
                        2、删除学生信息
                        3、修改学生信息
                        4、查询学生信息
                        5、退出管理系统
    *********************************************************************************************       
    '''

    def __init__(self):
        # 系统的标题
        self.students_list = []

    @classmethod
    def show_menu(cls):
        print(cls.menu)

    def load_info(self):
        # 当我打开这个程序时候，从test.pkl文件中加载数据到当前的模块中
        try:
            with open("test.json", mode="r") as f:
                self.students_list = json.load(f)
        except:
            with open("test.json", mode="w",encoding="utf-8") as f:
                json.dump(self.students_list, f,ensure_ascii=False)




    def save_info(self):
        # 每一次的新建、修改、删除的操作，都需要从新的写入文件
        with open("test.json", mode="w") as f1:
            json.dump(self.students_list, f1,ensure_ascii=False)


    def add_stu(self,stuobj):
        stu = {}
        # self.id, self.name, self.age, self.gender, self.mobile, self.address
        stu["id"],stu["name"],stu["age"],stu["gender"],stu["mobile"],stu["address"] = stuobj.get_stu_info()
        self.students_list.append(stu)


    def del_stu(self):
        self.load_info()
        id_name = input("输入删除学生的学号或者姓名：")
        for index, stu in enumerate(self.students_list):
            if id_name == stu["id"] or id_name == stu["name"]:
                is_dele = input(f"确定要删除{id_name}的信息吗？y/n")
                if is_dele.lower().strip() == "y":
                    del_stu = self.students_list.pop(index)
                    print(f'{del_stu["name"]}的信息被删除成功！')
                    self.save_info()
                    self.load_info()
                    return
        else:
            print("您输入的id/姓名不存在，请重新输入")
            return

    def modify_stu(self):
        modify_name = input("请输入要修改的学生的姓名或者学号")
        for stu in self.students_list:
            if modify_name == stu["id"] or modify_name == stu["姓名"]:
                stu["name"] = input("请输入学生姓名：")
                stu["age"] = int(input("请输入学生年龄："))
                stu["gender"] = input("请输入学生性别：")
                stu["mobile"] = input("请输入学生手机号：")
                stu["address"] = input("请输入学生的地址：")
                print(stu["name"], "信息修改成功！！")
                self.save_info()
                self.load_info()
                return
        else:
            print("输入的学生不存在！！，重新输入")

    def search_stu(self):
        self.load_info()
        if self.is_all.lower().strip() == "y":
            # 查询显示所有学生
            for stu in self.students_list:
                stu_info = f"id ：{stu['id']}\t姓名：{stu['name']}\t年龄：{stu['age']}\t性别：{stu['gender']}\t手机号：{stu['mobile']}\t地址：{stu['address']}"
                print(stu_info)
        else:
            # 查询单独一个学生
            search_name = input("输入要查询的学生的姓名或者学号")
            for stu in self.students_list:
                if search_name in stu["id"] or search_name in stu["name"]:
                    stu_info = f"id ：{stu['id']}\t姓名：{stu['name']}\t年龄：{stu['age']}\t性别：{stu['gender']}\t手机号：{stu['mobile']}\t地址：{stu['address']}"
                    print(stu_info)
    def main_loop(self):
        while True:
            StuSystem.show_menu()
            op_num = input("请输入操作的编号，(如：1表示添加学生信息 ):").strip()
            if op_num == "1":
                # 增加学生

                self.add_stu(Student())
                self.save_info()
                self.load_info()

            elif op_num == "2":
                # 删除学生
                self.del_stu()
            elif op_num == "3":
                # 修改学生
                # 先获取要修改的学生的姓名
               self.modify_stu()
            elif op_num == "4":
                # 查询学生
                # 判断查询全部学生还是单个学生
                self.is_all = input("是否显示所有学生列表：y/n")
                self.search_stu()

            elif op_num == "5":
                # 退出管理系统
                is_exit = input("您确定要退出管理系统吗 y/n")
                # 清除空格，并转小写后比对
                if is_exit.lower().strip() == "y":
                    print("谢谢使用学生管理系统，再见！！")
                    break

            else:
                print('您输入的操作符有误，请重新输入')


# 定义学生类

class Student:
    id = (str(i).zfill(5) for i in range(1, 10000))

    def __init__(self):
        '''
        :param args: 按照下面的顺序输入位置参数
        :param kwargs:
        '''
        self.id = next(Student.id)
        self.init_info()


    def init_info(self):
        self.name = input("请输入学生姓名：")
        self.age = input("请输入学生年龄：")
        self.gender = input("请输入学生性别：")
        self.mobile = input("请输入学生手机号：")
        self.address = input("请输入学生地址：")

    def get_stu_info(self):
        return self.id,self.name,self.age,self.gender,self.mobile,self.address

if __name__ == '__main__':
    system = StuSystem()
    system.main_loop()


